package com.ebupt.migu.restapi;

import java.util.Properties;

import org.springframework.stereotype.Component;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

import cn.hutool.extra.ssh.JschUtil;
import cn.hutool.extra.ssh.Sftp;
import lombok.extern.slf4j.Slf4j;

/**
 * @description: 用于对接统一标签服务平台的临时客群上传功能
 * @author: liuyangyang@ebupt.com
 * @date: 2021/8/31 15:48
 */
@Slf4j
@Component
public class UploadBySFTP {

    /**
     * 文件下载
     *
     * @param ip
     * @param port
     * @param userName
     * @param password
     * @param remotePath 远程路径
     * @param localPath 本地路径
     * @param remoteFileName 远程文件名
     * @return
     */
    public static boolean getSftpFile(String ip, int port, String userName, String password, String remotePath,
        String localPath, String remoteFileName) {
        // 从对端sftp获取加密文件
        try {
            JSch jSch = new JSch();
            jSch.setKnownHosts("/dev/null");
            Session session = jSch.getSession(userName, ip, port);
            session.setPassword(password);
            session.setTimeout(30 * 1000);
            Properties properties = new Properties();
            // 设置StrictHostKeyChecking 代表公钥检查机制，为no表示最不安全的级别（比如不提示一些安全警告）
            properties.put("StrictHostKeyChecking", "no");
            session.setConfig(properties);
            Sftp sftp = JschUtil.createSftp(session);
            log.info("创建下载连接成功：{}", ip);
            sftp.get(remotePath + remoteFileName, localPath);
            log.info("文件下载完成:{}", remotePath + remoteFileName);
            sftp.close();
            return true;
        } catch (Exception e) {
            log.error("SFTP下载文件失败：{}", e.getMessage());
            return false;
        }
    }

    /**
     * 文件上传
     *
     * @param ip
     * @param port
     * @param userName
     * @param password
     * @param remotePath 远程路径
     * @param localPath 本地路径
     * @param localFileName 本地文件
     * @return
     */
    public static boolean putSftpFile(String ip, int port, String userName, String password, String remotePath,
        String localPath, String localFileName) {
        try {
            JSch jSch = new JSch();
            jSch.setKnownHosts("/dev/null");
            Session session = jSch.getSession(userName, ip, port);
            session.setPassword(password);
            session.setTimeout(30 * 1000);
            Properties properties = new Properties();
            // 设置StrictHostKeyChecking 代表公钥检查机制，为no表示最不安全的级别（比如不提示一些安全警告）
            properties.put("StrictHostKeyChecking", "no");
            session.setConfig(properties);
            Sftp sftp = JschUtil.createSftp(session);
            log.info("创建上传连接成功:{}", ip);
            sftp.put(localPath + localFileName, remotePath);
            log.info("文件上传完成:{}", remotePath + localFileName);
            sftp.close();
            return true;
        } catch (Exception e) {
            log.error("SFTP上传文件失败：{}", e.getMessage());
            return false;
        }
    }
}
